// 过滤器
import moment from 'moment';
import { getType } from '@/utils/tools.js';

// 时间过滤
/*
*
* format 想要的时间格式
* cn:是否设置中文，默认否
*
* */
const getDate = (value, format = 'YYYY-MM-DD HH:mm:ss', cn = true, err) => {
  if (value === null) {
    let date = new Date();
    return date.getFullYear() + '-0' + (date.getMonth() + 1) + '-' + date.getDate() + ' 00:00:00';
  }

  if (value === undefined) {
    return '--';
  }

  return moment(value).format(format);
};

// 字数过滤
/*
*
* end :结束的字数
* start :开始的字数
*
* */
const wordLimit = (value, end = 10, start = 0) => {
  // 判断传入的数据类型 如果是数字，转换为字符串，其他的报错
  if (getType(value) === 'Number') {
    value += '';
  }
  if (getType(value) === 'String' && value.length > end) {
    return `${value.slice(start, end)}...`;
  } else {
    return value;
  }
};

// 切换大小写字母
/*
*
* type：想要切换的类型 默认1
* 1:首字母大写(不管后面字母的大小写)
* 2:首字母大写(后面字母统一小写)
* 3.首字母小写(不管后面字母的大小写)
* 4.大小写互换
* 5.全部大写
* 6.全部小写
*
* */
const getLetter = (value, type = 1) => {
  // console.log(value)
  // 去空格
  value = value.trim();
  switch (type) {
  case 1:
    return value.split('').reduce((prev, item, index) => {
      if (index === 0) {
        item = item.toUpperCase();
      }
      return prev + item;
    }, '');
  case 2:
    return value.split('').reduce((prev, item, index) => {
      if (index === 0) {
        item = item.toUpperCase();
      } else {
        item = item.toLowerCase();
      }
      return prev + item;
    }, '');
  case 3:
    return value.split('').reduce((prev, item, index) => {
      if (index === 0) {
        item = item.toLowerCase();
      }
      return prev + item;
    }, '');
  case 4:
    return value.split('').reduce((prev, item, index) => {
      // 判断大写正则
      let upReg = /^[A-Z]+$/;
      // let lowReg = "^[a-z]+$"; //用一个即可
      upReg.test(item) ? item = item.toLowerCase() : item = item.toUpperCase();
      return prev + item;
    }, '');
  case 5:
    return value.split('').reduce((prev, item, index) => {
      // 判断大写正则
      let upReg = /^[A-Z]+$/;
      // let lowReg = "^[a-z]+$"; //用一个即可
      item = upReg.test(item) ? item : item.toUpperCase();
      return prev + item;
    }, '');
  case 6:
    return value.split('').reduce((prev, item, index) => {
      // 判断大写正则
      let upReg = /^[A-Z]+$/;
      // let lowReg = "^[a-z]+$"; //用一个即可
      item = upReg.test(item) ? item.toLowerCase() : item;
      return prev + item;
    }, '');
  }
};

// 手机号码，身份证号码等数字类隐藏
/*
*
* start 开头几个数字或字数
* end 结尾几个数字或字数
*
* */
const hideNum = (value, start = 0, end = 0) => {
  // 先判断传入的数据类型 若是数字，转换为字符串
  if (typeof value === 'number') {
    // value += ""
    value = value.toString();
  }
  let hide = value.length - start - end;

  let str = '';
  for (let i = 0; i < hide; i++) {
    str += '*';
  }
  let regNum = new RegExp(`(\\d{${start}})(\\d{${hide}})(\\d{${end}})`);
  return value.replace(regNum, `$1${str}$3`);
};


const htmlDecode = (value) => {
  let s = '';
  if (value.length === 0) return '';
  s = value.replace(/&lt;/g, '<');
  s = s.replace(/&gt;/g, '>');
  s = s.replace(/&gt;/g, '>');
  s = s.replace(/&#40;/g, '(');
  s = s.replace(/&#41;/g, ')');
  s = s.replace(/&nbsp;/g, ' ');
  s = s.replace(/&#39;/g, '\'');
  s = s.replace(/&quot;/g, '"');
  s = s.replace(/<br>/g, '\n');
  return s;
};

export {
  getDate,
  wordLimit,
  getLetter,
  hideNum,
  htmlDecode
};
